package maxinshiSomeipTool20.dataMgr.dataType;

import java.util.ArrayList;
import java.util.List;

import ma.xin.shi.AutorsarCommonUtils;

public class DataTypeConfig {
    private List<DataTypeEntry> dataTypeList = new ArrayList<>();

    // 添加数据类型
    public void addDataType(DataTypeEntry entry) {
        dataTypeList.add(entry);
    }

    // 删除数据类型
    public boolean removeDataType(String name) {
        return dataTypeList.removeIf(e -> e.getDataTypeName().equals(name));
    }

    // 获取所有数据类型
    public List<DataTypeEntry> getAllDataTypes() {
        return new ArrayList<>(dataTypeList);
    }

    // 按名称获取数据类型
    public DataTypeEntry getDataTypeByName(String name) {
        for (DataTypeEntry entry : dataTypeList) {
            if (entry.getDataTypeName().equals(name)) {
                return entry;
            }
        }
        return null;
    }

    // 更新数据类型
    public boolean updateDataType(String name, DataTypeEntry updatedEntry) {
        for (int i = 0; i < dataTypeList.size(); i++) {
            if (dataTypeList.get(i).getDataTypeName().equals(name)) {
                dataTypeList.set(i, updatedEntry);
                return true;
            }
        }
        return false;
    }
    
    /* 根据数据类型名称获取基本类型，包括：APPLICATION-ARRAY-DATA-TYPE APPLICATION-PRIMITIVE-DATA-TYPE APPLICATION-RECORD-DATA-TYPE 
     * 对应 DataTypeEntry 中的 private String dataType;  Base / Array / Struct = Primitive Type , Array Type , Record Type
     * */
    public String getBasicDataTypeFromName(String dataTypeName) {
    	int i = 0;
        for (i = 0; i < dataTypeList.size(); i++) {
            if (dataTypeList.get(i).getDataTypeName().equals(dataTypeName)) {
                switch (dataTypeList.get(i).getDataType()) {
                	case "Primitive Type":
                		return "APPLICATION-PRIMITIVE-DATA-TYPE";
                	case "Array Type":
                		return "APPLICATION-ARRAY-DATA-TYPE";
                	case "Record Type":
                		return "APPLICATION-RECORD-DATA-TYPE";
                	default:
                		AutorsarCommonUtils.logEx("unkown basic data type: " + dataTypeList.get(i).getDataType());
                		return "APPLICATION-PRIMITIVE-DATA-TYPE";
                }
            }
        }
        AutorsarCommonUtils.logEx("unkown data type,not find in data type list: " + dataTypeName);
        return "APPLICATION-PRIMITIVE-DATA-TYPE";
    }
}
